<?php
/**
 * 数据流处理
 *
 * @category   ORG
 * @package    ORG
 * @subpackage Request
 * @author     海啸 <459103503@qq.com>
 */
class RequestData extends ArrayObject
{
    /**
     * 构造函数
     *
     * @param array $arr 待处理数据
     */
    public function __construct(array $arr = [])
    {
        parent::__construct($arr);
    }

    /**
     * Fetch specified variable
     *
     * @param string $name    数据下标
     * @param string $type    数据类型
     * @param string $default 默认返回的数据
     *
     * @return mixed
     */
    public function fetch($name, $type, $default = null)
    {
        if (!$this->offsetExists($name)) {
            return $default;
        }

        $ret = $this->offsetGet($name);
        switch ($type) {
        case 'int':
        case 'integer':
            return (int) $ret;
            break;
        case 'boolean':
        case 'bool':
            switch ($ret) {
            case 'true':
                return true;
                break;
            case 'false':
                return false;
                break;
            default:
                return (bool) $ret;
                break;
            }
            break;
        case 'float':
        case 'numeric':
            return (float) $ret;
            break;
        case 'array':
            return $ret;
            break;
        default:
            return (string) $ret;
            break;
        }
    }
}